package com.ns.sbs.oauth.minio.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ns.sbs.oauth.minio.entry.MinioItem;
import com.ns.sbs.oauth.minio.vo.MinioItemVO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 文件处理
 *
 * @author lw
 * @since 2023/11/22
 */
public interface IMinioFileService extends IService<MinioItem> {

    /**
     * 判断bucket是否存在，不存在则创建
     *
     * @param name 参数
     */
    void existBucket(String name);

    /**
     * 创建存储bucket
     *
     * @param bucketName 存储bucket名称
     * @return Boolean
     */
    Boolean makeBucket(String bucketName);

    /**
     * 删除存储bucket
     *
     * @param bucketName 存储bucket名称
     * @return Boolean
     */
    Boolean removeBucket(String bucketName);

    /**
     * 文件上传
     *
     * @param file 文件
     * @return File
     */
    MinioItemVO upload(MultipartFile file);

    /**
     * 文件下载
     *
     * @param fileName 文件名
     * @param delete   是否删除
     * @throws IOException
     */
    void fileDownload(@RequestParam(name = "fileName") String fileName,
                      @RequestParam(defaultValue = "false") Boolean delete,
                      HttpServletResponse response);

    /**
     * 查看文件对象
     *
     * @param bucketName 存储bucket名称
     * @return 存储bucket内文件对象信息
     */
    List<MinioItemVO> listObjects(String bucketName);

    /**
     * 批量删除文件对象
     *
     * @param bucketName 存储bucket名称
     * @param objects    对象名称集合
     * @return boolean
     */
    Boolean removeObjects(String bucketName, List<String> objects);
}
